package com.baosight.risk.api.xtzy;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baosight.risk.base.service.BaseService;
import com.baosight.risk.service.quartz.entity.SyncOrgEntitiy;
import com.baosight.risk.service.xtzy.entity.XtzyCompany;
import com.baosight.risk.service.xtzy.entity.XtzyUser;
import com.baosight.risk.service.xtzy.vo.XtzyCompanyVO;


/**
 * 类 名: XtzyCompanyService
 * 描 述:
 * 作 者: 黎秋荣
 * 创 建：2019年04月25日
 * 版 本：v2.2.0
 * 历 史: (版本) 作者 时间 注释
 */
public interface IXtzyCompanyService extends BaseService<XtzyCompany> {

    /**
     * 查询组织机构
     *
     * @param company 组织机构
     * @return
     */
    List<XtzyCompany> selectCompany(XtzyCompany company, XtzyUser user);

    List<XtzyCompany> selectAllCompany(XtzyCompany company);

    List<XtzyCompanyVO> getCompanyAndUsers(String pathLevel, String roleId, Integer userFalg, XtzyUser user);

    List<XtzyCompanyVO> getRiskCompany();

    /**
     * 找到可以发自评的一级子公司（排序）
     */
    List<XtzyCompany> selectCompanyByRisk(String pathCode);

    List<XtzyCompanyVO> getNextComp(String compId, String roleId);

    XtzyCompanyVO getParentComp(String compId, String roleId);

    List<XtzyCompany> getOneLevelCompany(String companyCode);

    List<XtzyCompany> getParantAndChildrens(String companyCode);

    List<XtzyUser> getUserAndCompIdAndRoleId(String compId, String roleId);

    XtzyCompany getTopCompany(String compCode, Short pathLevel);


    /**
     * 获取当前登陆人的公司
     *
     * @return
     */
    XtzyCompany getTop1CompanyByUser(String compCode);


    /**
     * 根据用户查找组织
     *
     * @param userCode
     * @return
     */
    List<XtzyCompany> getCompany(String userCode);

    /**
     * 根据id禁用组织机构
     *
     * @param id 组织机构ID
     * @return
     */
    Integer deleteById(String id);

    /**
     * @description 查询当前ID下全部子部门公司
     * @author CuiShiHao
     * @date 2019/8/30
     */
    List<XtzyCompany> selectAllSubsetByParentID(String parentGuid);

    /**
     * @description 更新公司启用禁用状态
     * @author CuiShiHao
     * @date 2019/8/30
     */
    Integer updateCompanyStatus(List<String> ids, String status);

    /**
     * @return
     * @description 从dbprodk5中拉去全部宝山钢铁股份有限公司数据
     * @author CuiShiHao
     */
    List<SyncOrgEntitiy> getAllOrgFromOtherDB(SyncOrgEntitiy syncOrgEntitiy);

    /**
     * @return
     * @description 对组织order进行重排序, 更新路径信息和OrderId
     * @author CuiShiHao
     */
    void updateSortCompany();

    Integer updateCompany(XtzyCompany company) throws Exception;

    /**
     * 根据公司类型查询组织机构
     *
     * @param compType 公司类型
     */
    List<XtzyCompany> getCompByCompType(String compType);

    List<XtzyUser> getUserByCompAndRole(String compCode, String roleCode);

    /**
     * 查询本单位及下属所有子公司
     *
     * @param xtzyCompany
     * @return
     */
    List<XtzyCompany> queryCompany(XtzyCompany xtzyCompany);

    /**
     * 生成EHR的组织树
     */
    Map<String, Object> selectOrgTree(String type);

    /**
     * 生成EHR的组织树
     */
    void selectOrgEhr(String type, List<Map<String, Object>> nodeMaps);


    List<XtzyCompany> selectCompanyList(@Param("compCode") String compCode);

    
    XtzyCompany getManageCompany(String compCode);
    
    List<XtzyCompany> ownerCompList(String compCode);

    /**
     * 验证查询条件中管理单位是否属于当前登录人所属单位及其下属
     * @param userManageCompCode 当前登陆人所属管理单位
     * @param queryManageCompCode 查询条件中的管理单位
     * @return
     */
    boolean checkManageCompCode(String queryManageCompCode,String userManageCompCode);

}